const { v4: uuid } = require('uuid');
const log = require('../lib/log');

/**
 * 日志中间件
 * @param {import('koa').Context} ctx 
 * @param {(error?: Error) => void} next 
 */
module.exports = async function (ctx, next) {
  ctx.traceId = uuid();
  const beginTimestamp = Date.now();
  ctx.result = { success: false };
  log.request.info(`request [${ ctx.traceId }] ${ ctx.request.url } ${ JSON.stringify(ctx.request.body) }`);
  await next();
  if (!ctx.result.message) {
    ctx.result.message = ctx.result.success ? '200 ok!' : 'unkonw error!';
  }
  ctx.append('Access-Control-Allow-Origin', '*');
  if (!ctx.response.body) {
    ctx.response.body = ctx.result;
    log.request.info(`response [${ ctx.traceId }] ${ ctx.request.url } (${ (Date.now() - beginTimestamp) }ms) ${ JSON.stringify(ctx.response.body) }`);
  }
};